import { createAxios, createDefaultTransform, setHttpConfig } from '@tuxing/network-http';
import { ElMessage } from 'element-plus';

// 客户端ID
const CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e';

// 延迟导入store，避免初始化时序问题
let loginStore: any = null;
let isStoreInitialized = false;

/**
 * 懒加载loginStore
 */
const getLoginStore = () => {
  if (!isStoreInitialized) {
    try {
      // 动态导入store
      import('../store').then(({ useLoginStore }) => {
        loginStore = useLoginStore();
        isStoreInitialized = true;
      });
    } catch (error) {
      console.warn('Login store not initialized yet:', error);
    }
  }
  return loginStore;
};

/**
 * 初始化HTTP配置
 */
export function setupHttpConfig() {
  console.log('HTTP Config: VITE_APP_ENCRYPT =', import.meta.env.VITE_APP_ENCRYPT);
  console.log('HTTP Config: Setting up HTTP configuration...');

  // 配置HTTP组件
  setHttpConfig({
    // 错误码映射
    errorCode: {
      401: '认证失败，无法访问系统资源',
      403: '当前操作没有权限',
      404: '访问资源不存在',
      500: '服务器内部错误',
      601: '参数校验失败',
      default: '系统未知错误，请反馈给管理员',
    },

    // 消息插件配置
    messagePlugin: {
      error: (message: string) => ElMessage.error(message),
      warning: (message: string) => ElMessage.warning(message),
      info: (message: string) => ElMessage.info(message),
      success: (message: string) => ElMessage.success(message),
    },

    // 用户存储配置
    userStore: {
      get token() {
        // 从loginStore中获取token
        const store = getLoginStore();
        return store ? store.getToken() : '';
      },
      logout: async () => {
        const store = getLoginStore();
        if (store) {
          await store.logout();
        }
      },
    },

    // 通知插件配置
    notifyPlugin: {
      error: (options) => ElMessage.error(options.title),
      warning: (options) => ElMessage.warning(options.title),
      info: (options) => ElMessage.info(options.title),
      success: (options) => ElMessage.success(options.title),
    },
  });

  console.log('HTTP Config: Configuration set successfully');
  console.log('HTTP Config: Creating axios instance with transform (should include createDefaultTransform)...');

  // 创建适合微应用的axios实例
  const microAppAxios = createAxios({
    // 微应用专用配置
    baseURL: '', // 使用空字符串，让Vite代理处理
    timeout: 10000,
    headers: {
      'Content-Type': 'application/json;charset=utf-8',
    },
    // 显式包含transform配置，确保createDefaultTransform被正确应用
    transform: createDefaultTransform(),
    // 认证方案，用于Authorization头
    authenticationScheme: 'Bearer',
    requestOptions: {
      // 接口地址
      apiUrl: '/dev-api', // 设置API前缀
      // 是否自动添加接口前缀
      isJoinPrefix: false,
      // 接口前缀
      urlPrefix: '',
      // 是否返回原生响应头
      isReturnNativeResponse: false,
      // 需要对返回数据进行处理
      isTransformResponse: true,
      // post请求的时候添加参数到url
      joinParamsToUrl: false,
      // 格式化提交参数时间
      formatDate: true,
      // 是否加入时间戳
      joinTime: true,
      // 是否忽略请求取消令牌
      ignoreCancelToken: true,
      // 是否携带token
      withToken: true,
      // 是否加密
      withEncrypt: true, // 微应用默认开启加密
      // 重试
      retry: {
        count: 0,
        delay: 1000,
      },
      // 防止数据重复提交
      repeatSubmit: true,
    },
  });

  // 添加请求拦截器来设置clientId
  microAppAxios.getAxios().interceptors.request.use(
    (config: any) => {
      // 设置客户端标识到请求头
      config.headers['X-Client-Id'] = CLIENT_ID;

      // 在请求体中也添加clientId
      if (config.method?.toUpperCase() === 'POST' || config.method?.toUpperCase() === 'PUT') {
        if (config.data && typeof config.data === 'object') {
          config.data.clientId = CLIENT_ID;
        }
      }

      return config;
    },
    (error: any) => {
      return Promise.reject(error);
    },
  );

  console.log('HTTP Config: axios instance created successfully');
  // 移除错误的defaults属性访问
  console.log('HTTP Config: withEncrypt setting is configured in createAxios call');
  console.log('HTTP Config: VITE_APP_ENCRYPT is:', import.meta.env.VITE_APP_ENCRYPT);

  return microAppAxios;
}
